home *** CD-ROM | disk | FTP | other *** search
/ Crack It! / Crack It!.iso / CUTTER.SCP < prev    next >
Text File  |  1998-04-16  |  25KB  |  856 lines

  1. ***
  2. *Crack-It Launcher - Script Version 0.30
  3. *Authors T. K. Tierney, A. Fauteux.
  4. *
  5. *Kludges: Call problems.
  6. *
  7.     Debug all
  8.     Version     Cutter,0.126
  9.  
  10. *Constants
  11.  
  12.     set     MAX640NOSCALE,77
  13.     set     MAX800NOSCALE,88
  14.     set     MAX640SCALE,123
  15.     set     MAX800SCALE,155
  16.  
  17. *Initial setup - Preload the the main slist, theme and phrase systems.
  18.  
  19.     readfile    MainList, content\mainlist.sl, slist
  20.     gosub       shInitTheme
  21.     gosub       shInitPhrase
  22.  
  23. *Play the opening video.
  24.  
  25.     player      1,play,avi,video\aztechmv.avi
  26.  
  27. :AviLoop
  28.     player      1,check
  29.     if @$STATUS eq PLAY goto AviLoop
  30.  
  31. **
  32. *Display the Title Page.
  33. *
  34.  
  35. :TitleDisplay
  36.     openhtml    1,100%,95%,0%,0%
  37.  
  38.     concat  Title800Adjust,"<center><big>Welcome To CRACK IT</big>
  39.             &<br><a href=^"exit:?TitleGifClick^">Next</a></center><br>"
  40.  
  41.     if @$ScreenWidth eq 640 clear Title800Adjust
  42.  
  43.     concat  x,
  44.             &"<body background=^"art\bkgnd.gif^">
  45.             &<br>",@Title800Adjust,
  46.             &"<center><a href=^"exit:?TitleGifClick^"><img src=^"art\welcome.gif^"></a>
  47.             &</center></body>"
  48.  
  49.     dohtml  1,Crack-It Title Page,@x,titlekill,1
  50.     gosub   shTheme
  51.     dohtml  1,Crack-It Title Page,@x,titlekill,30
  52.  
  53.     goto    WelcomeDisplay
  54.  
  55. :TitleGifClick
  56.     goto    WelcomeDisplay
  57.  
  58. :TitleKill
  59.     gosub   shPhrase
  60.     gosub   Quitter
  61.     goto    TitleDisplay
  62.  
  63. **
  64. *Display the Welcome page.
  65. *
  66.  
  67. :WelcomeDisplay
  68.  
  69.     set Welcome800Adjust,<br><br><br>
  70.     if @$ScreenWidth eq 640 clear Welcome800Adjust
  71.  
  72. :WelcomeReDisplay
  73.     concat  x,
  74.             &"<body background="art\bkgnd.gif">
  75.             &<a href="exit:?WelcomeQuitClick">Quit Crack-It </a>^|
  76.             &<a href="exit:?WelcomeKillMusicClick"> Kill the Music!</a>^
  77.             &<br><br><br><br>",@Welcome800Adjust,
  78.             &"<center><img src=^"art\Splash.gif^" usemap=^"#splashMap^">
  79.             &<MAP NAME=^"splashMap">
  80.             &<AREA COORDS=^"11^,237^,147^,271^" HREF=^"exit:?AboutPageClick^">
  81.             &<AREA COORDS=^"154^,232^,296^,275^" HREF=^"exit:?SelectionPageClick^">
  82.             &<AREA COORDS=^"305^,234^,444^,276^" HREF=^"exit:?DemoPageClick^">
  83.             &<AREA COORDS=^"453^,236^,590^,269^" HREF=^"exit:?CatalogButtonClick^">
  84.             &</map></body>"
  85.  
  86.     dohtml  1,Crack-It Welcome Page, @x,welcomekill,1
  87.     gosub   shTheme
  88.     dohtml  1,Crack-It Welcome Page, @x,welcomekill
  89.     goto    SelectionDisplay
  90.  
  91. :WelcomeKillMusicClick
  92.     gosub   shPhrase
  93.     set     shThemeEnable,FALSE
  94.     goto    WelcomeReDisplay
  95.  
  96. :WelcomeQuitClick
  97. :WelcomeKill
  98.     gosub   shPhrase
  99.     gosub   Quitter
  100.     goto    WelcomeReDisplay
  101.  
  102. :ABoutPageClick
  103.     gosub   shPhrase
  104.     goto    AboutDisplay
  105.  
  106. :CatalogButtonClick
  107.     gosub   shPhrase
  108.     execute catalog\aztech.exe,,catalog
  109.     goto    WelcomeDisplay
  110.  
  111. :SelectionPageClick
  112.     gosub   shPhrase
  113.     goto    SelectionDisplay
  114.  
  115. :DemoPageClick
  116.     gosub   shPhrase
  117.     goto    Demodisplay
  118.  
  119. **
  120. *Display the About page.
  121. *
  122.  
  123. :AboutDisplay
  124.     gosub       shTheme
  125.     concat  x,<body background="art\bkgnd.gif"><a href="exit:?AboutBackClick">Go back</a>
  126.             &<br><center><img src="art\about.gif"></center><br></body>
  127.     doHTML    1,About Crack-It!,@x,AboutKill
  128.  
  129. :AboutKill
  130.     gosub   shPhrase
  131.     gosub   Quitter
  132.     goto    AboutDisplay
  133.  
  134. :AboutBackClick
  135.     gosub   shPhrase
  136.     goto    WelcomeDisplay
  137.  
  138. **
  139. *Display the Demo page.
  140. *
  141.  
  142. *Re-display the page with any data from the previous display.
  143.  
  144. :DemoDisplay
  145. :DemoRedisplay
  146.  
  147.     gosub       shTheme
  148.  
  149.     concat  x,
  150.             &<body background="art\bkgnd.gif">
  151.             &<TABLE BORDER="0" COLS="2">
  152.             &<TR><TD WIDTH="107"><a href="exit:?WelcomeDisplay">Go back</a></TD>
  153.             &<TD>Click on one of these Buttons to install a demo.</TD>
  154.             &</TR></TABLE>,
  155.             &<center><img src=^"art\demo.gif^" usemap=^"#demomap^"></center>,
  156.             &<MAP NAME=^"demomap^">
  157.             &<AREA COORDS=^"18^,52^,319^,147^" HREF=^"exit:?DemoLaunch1^">
  158.             &<AREA COORDS=^"21^,160^,321^,222^" HREF=^"exit:?DemoLaunch2^">
  159.             &<AREA COORDS=^"19^,234^,321^,330^" HREF=^"exit:?DemoLaunch3^">
  160.             &<AREA COORDS=^"14^,340^,328^,384^" HREF=^"exit:?DemoLaunch4^">
  161.             &</MAP><p></body>
  162.  
  163.     dohtml  1,Crack-It Demo Page,@x,DemoKill
  164.  
  165. :DemoLaunch1
  166.     gosub   shPhrase
  167.     execute DEMOS\MECHWAR\start.exe,,DEMOS\MECHWAR
  168.     goto    DemoRedisplay
  169.  
  170. :DemoLaunch2
  171.     gosub   shPhrase
  172.     execute DEMOS\AW3Demo.EXE
  173.     goto    DemoRedisplay
  174.  
  175. :DemoLaunch3
  176.     gosub   shPhrase
  177.     LOADSCRIPT demos\f22.scp,,ReturnLabel
  178.     :ReturnLabel
  179.     goto    DemoRedisplay
  180.  
  181. :DemoLaunch4
  182.     gosub   shPhrase
  183.     execute DEMOS\dx5eng.exe
  184.     goto    DemoRedisplay
  185.  
  186.  
  187. :DemoKill
  188.     gosub   shPhrase
  189.     gosub   Quitter
  190.     goto    DemoReDisplay
  191.  
  192. **
  193. *Display the Selection page
  194. *
  195.  
  196. :SelectionDisplay
  197.     clear cshcHTML,GameSearchString
  198.  
  199. *Re-display the page with any data from the previous display.
  200.  
  201. :SelectionRedisplay
  202.     concat  x,
  203.             &<body background="art\bkgnd.gif">,
  204.             &<a href="exit:?SelectionBackClick">Go back</a><br><br>,
  205.             &<center><img src=^"art\alphabet.gif^" usemap=^"#alphamap^"></center>,
  206.             &<MAP NAME=^"alphamap">
  207.             &<AREA COORDS=^"1^,0^,44^,45^" HREF=^"exit:GameSearchString=A?SelectionAlpha^">
  208.             &<AREA COORDS=^"48^,3^,89^,45^" HREF=^"exit:GameSearchString=B?SelectionAlpha^">
  209.             &<AREA COORDS=^"96^,5^,136^,45^" HREF=^"exit:GameSearchString=C?SelectionAlpha^">
  210.             &<AREA COORDS=^"143^,2^,184^,45^" HREF=^"exit:GameSearchString=D?SelectionAlpha^">
  211.             &<AREA COORDS=^"190^,4^,229^,45^" HREF=^"exit:GameSearchString=E?SelectionAlpha^">
  212.             &<AREA COORDS=^"234^,4^,275^,46^" HREF=^"exit:GameSearchString=F?SelectionAlpha^">
  213.             &<AREA COORDS=^"281^,5^,320^,47^" HREF=^"exit:GameSearchString=G?SelectionAlpha^">
  214.             &<AREA COORDS=^"327^,4^,365^,46^" HREF=^"exit:GameSearchString=H?SelectionAlpha^">
  215.             &<AREA COORDS=^"373^,4^,413^,45^" HREF=^"exit:GameSearchString=I?SelectionAlpha^">
  216.             &<AREA COORDS=^"420^,4^,458^,45^" HREF=^"exit:GameSearchString=J?SelectionAlpha^">
  217.             &<AREA COORDS=^"466^,5^,505^,46^" HREF=^"exit:GameSearchString=K?SelectionAlpha^">
  218.             &<AREA COORDS=^"511^,4^,551^,46^" HREF=^"exit:GameSearchString=L?SelectionAlpha^">
  219.             &<AREA COORDS=^"559^,4^,597^,45^" HREF=^"exit:GameSearchString=M?SelectionAlpha^">
  220.             &<AREA COORDS=^"5^,50^,45^,93^" HREF=^"exit:GameSearchString=N?SelectionAlpha^">
  221.             &<AREA COORDS=^"51^,50^,91^,93^" HREF=^"exit:GameSearchString=O?SelectionAlpha^">
  222.             &<AREA COORDS=^"97^,50^,137^,92^" HREF=^"exit:GameSearchString=P?SelectionAlpha^">
  223.             &<AREA COORDS=^"143^,50^,183^,92^" HREF=^"exit:GameSearchString=Q?SelectionAlpha^">
  224.             &<AREA COORDS=^"190^,51^,229^,93^" HREF=^"exit:GameSearchString=R?SelectionAlpha^">
  225.             &<AREA COORDS=^"236^,50^,275^,91^" HREF=^"exit:GameSearchString=S?SelectionAlpha^">
  226.             &<AREA COORDS=^"283^,51^,321^,93^" HREF=^"exit:GameSearchString=T?SelectionAlpha^">
  227.             &<AREA COORDS=^"327^,51^,366^,93^" HREF=^"exit:GameSearchString=U?SelectionAlpha^">
  228.             &<AREA COORDS=^"373^,51^,412^,93^" HREF=^"exit:GameSearchString=V?SelectionAlpha^">
  229.             &<AREA COORDS=^"420^,51^,459^,92^" HREF=^"exit:GameSearchString=W?SelectionAlpha^">
  230.             &<AREA COORDS=^"466^,53^,505^,94^" HREF=^"exit:GameSearchString=X?SelectionAlpha^">
  231.             &<AREA COORDS=^"512^,52^,551^,93^" HREF=^"exit:GameSearchString=Y?SelectionAlpha^">
  232.             &<AREA COORDS=^"557^,52^,596^,92^" HREF=^"exit:GameSearchString=Z?SelectionAlpha^">
  233.             &</MAP>,
  234.             &"<br><B><center>Click on a letter, or enter a keyword and click SEARCH.</b></center>",
  235.             &"<br><center><FORM method=GET>",
  236.             &<INPUT NAME=GameSearchString size=30 maxlength=50 VALUE=",@GameSearchString,
  237.             &^"> <INPUT TYPE=submit value=Search Name=^"exit:?SelectionKeyword^"></FORM></center>,
  238.             &@cshcHTML, </body>
  239.  
  240.     gosub   shTheme
  241.     dohtml  1,Crack-It Game Selection Page,@x,SelectionKill
  242.  
  243. :SelectionBackClick
  244.     gosub   shPhrase
  245.     goto    WelcomeDisplay
  246.  
  247. *This exit assumes that a keyword has been chosen.
  248.  
  249. :SelectionKeyword
  250.  
  251. *First eliminate a zero-length string
  252.  
  253.     convert GameSearchString,trim
  254.  
  255.     set     y,len @GameSearchString
  256.     if @y eq 0
  257.         signpost    display,Blank Keyword.,
  258.                     &<p><center>No keyword was indicated. <p>Please try again.</center>,40%,12%,20
  259.         goto SelectionDisplay
  260.     endif
  261.  
  262. *Next deal with too short a keyword.
  263.  
  264.     if @y lt 3
  265.         signpost    display,Keyword should be more specific.,
  266.                     &<p><center>This selection is likely to generate far too many entries.
  267.                     &<p>Please be more specific.</center>,40%,20%,30
  268.         goto    SelectionReDisplay
  269.     endif
  270.  
  271. *Next deal with multiple keywords
  272.  
  273.     instring   x,@GameSearchString," ",1
  274.     if @x gt 0
  275.         signpost    display,Multiple Keywords.,
  276.                     &<p><center>More than one keyword was entered.
  277.                     &<p>Please use a single keyword.</center>,40%,20%,30
  278.         goto    SelectionReDisplay
  279.     endif
  280.  
  281. *Validation complete. Call the search engine.
  282.  
  283.     gosub  CreateSelectionHTMLCode
  284.     goto   Selection1
  285.  
  286. *Handle Alpha Selections
  287.  
  288. :SelectionAlpha
  289.  
  290. *if the file is not ready, call the search engine, else load from the file.
  291.  
  292.     concat      y,search\,@GameSearchString,.txt
  293.     findfile    x,@y
  294.     if @x eq ""
  295.         gosub   CreateAlphaSelectionHTMLCode
  296.     else
  297.         readfile    cshcHTML,@y
  298.     endif
  299.  
  300.     clear   GameSearchString
  301.  
  302. :Selection1
  303.     if @cshcHTML eq ""
  304.         signpost    display,No matches found.,
  305.                     &"<p><center>Sorry, but no matches were found.<p> Please try again.</center>",40%,10%,30
  306.     else
  307.         concat cshcHTML, "<table> <caption> Search Results: </caption>",@cshcHTML, "</table>"
  308.     endif
  309.  
  310.     goto SelectionRedisplay
  311.  
  312. :SelectionKill
  313.     gosub   shPhrase
  314.     gosub   Quitter
  315.     goto    SelectionReDisplay
  316.  
  317. :SelectionMade
  318.  
  319. **
  320. *Display of the Content page
  321. *
  322.  
  323. :ContentDisplay
  324.     gosub   CreateContentHTMLCode
  325.  
  326. :ContentReDisplay
  327.     gosub       shTheme
  328.     concat  x,
  329.             &<body background=art\bkgnd.gif>,
  330.             &<a href=^"exit:?SelectionReDisplay^">Go back</a><br><br>,
  331.             &"<center><bold><big><big>Content Page for ",@cchcGN,</center></bold></big></big>,
  332.             &<br><br><table> <caption>Material Available</caption><br>,
  333.             &@cchcHTML, </table></body>
  334.  
  335.     dohtml  1,Crack-It Content Page,@x,ContentKill
  336.  
  337. :ContentKill
  338.     gosub   shPhrase
  339.     gosub   Quitter
  340.     goto    ContentReDisplay
  341.  
  342. :ContentItemClick
  343.     gosub   shPhrase
  344.  
  345. *Decode the ActionData variable. Format: <action>;<path>;<scale>;<filename>;<description>
  346.  
  347.     extract x,1,@ActionData
  348.     extract ItemPath,2,@ActionData
  349.     extract ItemScale,3,@ActionData
  350.     extract ItemFN,4,@ActionData
  351.     extract ItemDesc,5,@ActionData
  352.     if @x eq "Install" goto InstallItem
  353.  
  354. **
  355. *Display of the ReadItem page
  356. *
  357.  
  358. :ReadItemDisplay
  359. :ReadItemReDisplay
  360.     gosub       shTheme
  361.  
  362.     concat  x,@ItemPath,\,@ItemFN
  363.     readfile    ItemFile,@x
  364.     if @$status ne "TRUE"
  365.         Scream File not found..,@x
  366.         halt
  367.     endif
  368.  
  369. *Handle scaling.
  370.  
  371.     if @ItemScale eq 0
  372.         set ScaleHTML,"<font SIZE="3">"
  373.     else
  374.         if @$Screenwidth eq 640
  375.             if @Itemscale gt MAX640NOSCALE set ScaleHTML,"<font SIZE="-1">"
  376.         else
  377.             if @Itemscale gt MAX800NOSCALE set ScaleHTML,"<font SIZE="-1">"
  378.         endif
  379.     endif
  380.  
  381.     concat  y,"Crack-It Item Page for ",@ItemFN
  382.     concat  x,
  383.             &<body background=art\bkgnd.gif>
  384.             &<a href=^"exit:?ContentReDisplay^">Go back</a>,"   ",
  385.             &<a href="exit:?ReadItemPrintPage">Print Page</a><br><br>
  386.             &<PRE>,
  387.             &@ItemFile,
  388.             &</FONT></PRE></body>
  389.  
  390.     dohtml  1,@y,@x,ReadItemKill
  391.  
  392.     goto    ContentReDisplay
  393.  
  394. :ReadItemPrintPage
  395.     gosub   shPhrase
  396.     gosub   PrintPAge
  397.     goto    ReadItemReDisplay
  398.  
  399. :ReadItemKill
  400.     gosub   shPhrase
  401.     goto    ContentReDisplay
  402.  
  403. **
  404. *Install the item.
  405. *
  406. *This either runs an executable file, warns about a ZIP file,
  407. *or else runs an SA script with the same first name
  408. *which will take care of the installation.
  409. *
  410.  
  411. :InstallItem
  412.  
  413.     set     fncFN,@ItemFN
  414.     gosub   FileNameCracker
  415.     convert fncName,Uppercase
  416.  
  417.     concat      x,@ItemPath,\,@fncName,.SCP
  418.     findfile    x,@x
  419.  
  420.     if @x ne "" goto InstallItemViaScript
  421.     if @fncExt ne "ZIP" goto InstallItemDirectly
  422.  
  423. *Handle Zips.
  424.  
  425. :InstallItemViaZIP
  426.  
  427.     concat  x,
  428.             &"<center><bold><big>Compressed utility: ",@ItemFN,</center></bold></big>
  429.             &<p><p><p>The utility ^",@ItemFN,^" is a compressed (ZIP) file.
  430.             &<p>It can be found on the Crackit CD-ROM in at ^",@Itempath,\,@ItemFN,^".,"
  431.             &<p>If you wish to use this file, please move it over to a temporary
  432.             & directory on your hard drive, and then uncompress it with a ZIP utility.
  433.             &<p>If these instructions do not make sense to you, you should consult
  434.             & an experienced computer user before using this utility."
  435.     signpost Ok,"Zip file!",@x,400,350
  436.  
  437.     goto    ContentReDisplay
  438.  
  439. *InstallAgent script file found. Execute it. Return to Content page when completed
  440.  
  441. :InstallItemViaScript
  442.     gosub   shPhrase
  443.  
  444.     loadscript  @x,,InstallItemReturn
  445.  
  446. :InstallItemViaScriptReturn
  447.     goto    ContentReDisplay
  448.  
  449. *Run the File directly
  450.  
  451. :installitemreturn
  452.    goto    ContentReDisplay
  453.  
  454.  
  455. :InstallItemDirectly
  456.     gosub   shPhrase
  457.  
  458.     concat  y,@Itempath,\
  459.     findfile y,@y
  460.     if @y ne ""
  461.         concat  x,@y,@ItemFN
  462.         execute @x,,@y
  463.     endif
  464.  
  465.     goto    ContentReDisplay
  466.  
  467. ****** subroutines *********
  468.  
  469. **
  470. *Sub Quitter - Checks if the user wants to kill the script.
  471. *
  472.  
  473. :Quitter
  474.     concat      x,<br><center>Do you want really want to exit the program?</center>
  475.     signpost    yesno,Exit Program?,@x,224,144
  476.  
  477.     if @$status eq YES halt
  478.  
  479.     return
  480.  
  481. **
  482. *Sub PrintPage - Prints the current HTML Window. Often caled from HTML
  483. *
  484.  
  485. :PrintPage
  486.     PrintHTML   1
  487.     return
  488. **
  489. *Sub Quitter - Checks if the user wants to kill the script.
  490. *
  491.  
  492.  
  493. **
  494. *Sub FileNameCracker - Breaks a file name into its components. Partially implemented
  495. *
  496. *Entry: fncFN is the filepath to be cracked.
  497. *
  498. *Exit:  fncStatus = TRUE if the operation worked. FALSE if it failed.
  499. *       fncExt = the extension part of the item. "" if there was none.
  500. *       fncName = the name part of the item.
  501. *       fncPath = the path part of the item.  (NYI)
  502. *
  503.  
  504. :FileNameCracker
  505.  
  506. *Locate extension and extract it.
  507.  
  508.     set fncStatus,FALSE
  509.  
  510.     clear fncExt
  511.  
  512.     InString    fncx, @fncFN,"."
  513.  
  514.     if @fncx ne 0
  515.         set fncx, @fncx + 1
  516.         substring   fncExt,@fncFN,@fncx,99
  517.         convert fncExt,Trim
  518.     endif
  519.  
  520. *Extract the file name
  521.  
  522.     if @fncx eq 0
  523.         set fncName,@fncFN
  524.     else
  525.         set fncx,@fncx - 2
  526.         substring   fncName,@fncFN,1,@fncx
  527.         convert     fncName,Trim
  528.     endif
  529.  
  530. *Clean up
  531.  
  532.     set fncStatus,TRUE
  533.     clear fncPath
  534.     return
  535.  
  536. **
  537. *(CSHC) CreateSelectionHTMLCode - create the SelectionHTMLCode string based
  538. *upon the results of a search of MainList.sl game titles.
  539. *
  540. *The fragment created is a table of many lines, one for each game found.
  541. *If an entry is clicked, it exits HTML, setting variable ContentData to an slist
  542. *containing the Game name and subdirectory name for the content item selected.
  543. *
  544. *Entry: CreateSelectionHTMLCode: GameSearchString contains the data from the Selection form.
  545. *       CreateAlphaSelectionHTMLCode: GameSearchString contains the single character from
  546. *       the Alphabetic search graphic.
  547. *
  548. *       Mainlist.sl format: <Game Name>; <Game Material Codes>; <Subdirectory>
  549. *
  550. *Exit:  Returns to Parent script.
  551. *       cshcHTML contains the HTML fragment to be included in the selection page.
  552. *       cshcSLCount is the count of entries found.
  553. *
  554.  
  555. **
  556. *Variables:
  557. *
  558. *   cshcIndex       Index for the MainList slist.
  559. *   cshcGN          Game Name, extracted from MainList.
  560. *   cshcGMC         Game Material Codes for this entry.
  561. *   cshcSub         Game subdirectory.
  562. *   cshcSL          A (shortlist) slist of the indexes of elements of MainList which match GameSearchString
  563. *   cshcSLIndex     Index for cshcSL
  564. *   cshcSLCount     Number of entries found.
  565. *   cshcX           Scratch.
  566. *   cshcY           Scratch.
  567. *   cshcZ           Scratch.
  568. *   cshcHTML        Output HTML fragment.
  569. *
  570.  
  571. **
  572. *Alternate Entry - CreateSelectionHTMLCode. Extract keyword matches into a short list.
  573. *
  574.  
  575. :CreateSelectionHTMLCode
  576.  
  577.     search  cshcSL, @MainList, @GameSearchString, 3, 1
  578.     goto    cshcInitialize
  579.  
  580. **
  581. *Alternate entry - CreateAlphaSelectionHTMLCode.  Extract alphabet matches into a short list.
  582. *
  583.  
  584. :CreateAlphaSelectionHTMLCode
  585.  
  586.     search  cshcSL, @MainList, @GameSearchString, 3, 1, Startwith
  587.     goto    cshcInitialize
  588.  
  589. *Initialize.
  590.  
  591. :cshcInitialize
  592.     clear   cshcIndex,cshcGN,cshcIT,cshcGMC,cshcSub,cshcX,cshcY,cshcZ,cshcHTML
  593.     set     cshcSLIndex,0
  594.  
  595. *Extraction and processing loop.
  596.  
  597.     set     cshcSLCount, count @cshcSL
  598.  
  599. :cshcExtractLine
  600.  
  601.     set     cshcSLIndex, @cshcSLIndex + 1
  602.  
  603.     if      @cshcSLIndex gt @cshcSLCount     goto cshcExit
  604.  
  605. *Extract the items indicated in the Short List.
  606.  
  607. :cshcGenerateHTML
  608.  
  609.     extract cshcIndex,@cshcSLIndex,@cshcSL
  610.  
  611.     extract cshcGN,@cshcIndex,@Mainlist
  612.     set cshcIndex,@cshcIndex + 1
  613.  
  614.     extract cshcGMC,@cshcIndex,@MainList
  615.     convert cshcGMC,Uppercase
  616.     set cshcIndex,@cshcIndex + 1
  617.  
  618.     extract cshcSub,@cshcIndex,@MainList
  619.     set cshcIndex,@cshcIndex + 1
  620.  
  621. *Put up the progress display.
  622.  
  623.     set     cshcX, @cshcSLIndex / @cshcSLCount
  624.     set     cshcY,len @cshcHTML
  625.     progress    Open,Scanning.,"Scanning... ",@cshcGN,@cshcX
  626.  
  627. *Expand cshcGMC into long hand in cshcX.
  628.  
  629.     clear cshcX
  630.     instring  cshcZ, @cshcGMC, "C"
  631.     if @cshcZ gt 0  concat cshcX, @cshcX, "Cheats  "
  632.  
  633.     instring  cshcZ, @cshcGMC, "U"
  634.     if @cshcZ gt 0  concat cshcX, @cshcX, "Utilities  "
  635.  
  636.     instring  cshcZ, @cshcGMC, "T"
  637.     if @cshcZ gt 0  concat cshcX, @cshcX, "Tips & Tricks  "
  638.  
  639.     instring  cshcZ, @cshcGMC, "E"
  640.     if @cshcZ gt 0  concat cshcX, @cshcX, "Errors  "
  641.  
  642.     instring  cshcZ, @cshcGMC, "W"
  643.     if @cshcZ gt 0  concat cshcX, @cshcX, "Walkthroughs  "
  644.  
  645. *Concatenate a fragment of HTML code onto SelectionHTMLCode.
  646. *Each frag is a table row for the entry found. If clicked, it sets ContentSub.
  647.  
  648.     concat  cshcHTML,@cshcHTML,
  649.             &<tr><td>,@cshcSLIndex,</td><td><a href=^"exit:ContentData=,
  650.             &@cshcGN,";",@cshcSub,?Selectionmade^">,
  651.             &@cshcGN,.</a></td><td>,@cshcX, </td></tr><br>
  652.     goto cshcExtractLine
  653.  
  654. *Clean up our toys and return.
  655.  
  656. :cshcExit
  657.  
  658.     Progress    Close
  659.     Release     cshcIndex,cshcGN,cshcGMC,cshcX,cshcY,cshcZ,cshcSL,cshcSLIndex,cshcSub
  660.     Return
  661.  
  662. **
  663. *(CCHC) CreateContentHTMLCode - create the ContentHTMLCode string based upon the slist found in CONTENT.SL
  664. *
  665. *Entry: ContentData contains an slist with Game Name;Subdirectory.
  666. *       Content.sl is a file containing the contents slist we are to use.
  667. *
  668. *Content.sl file format:
  669. *   Row 1: Comment
  670. *   Row 2..N            <Entry file Name>;<Entry Description>;<Entry Mat Codes>;<Entry Action>;
  671. *
  672. *Exit:  cchcGN contains the game name.
  673. *       cchcHTML contains the HTML fragment of table entries to be included in the Content page.
  674. *
  675. *           clicking an entry generates ActionData as an slist: <action>;<path>;<filename>;<description>
  676. *
  677.  
  678. **
  679. *Variables:
  680. *
  681. *   ContentData     String containing subdirectory name of the content area.
  682. *   cchcPath        String containing the expanded file path of the content area.
  683. *   cchcIndex       Index to the cchcContentSlist
  684. *   cchcContentList Slist contains the contents for this subdirectory.
  685. *   cchcListCount   Number of segments in the slist
  686. *   cchcHTML        String contains the assembled HTML code fragment.
  687. *   cchcED          Entry Description (longhande description)
  688. *   cchcEFN         Entry File Name
  689. *   cchcEMC         Entry Material Codes
  690. *   cchcEAC         Entry Action
  691. *   cchcGN          Contains the game name
  692. *   cchcScale       Contains the scaling width of the text file
  693. *   cchcX           Scratch
  694. *   cchcY           Scratch
  695. *   cchcZ           Scratch
  696.  
  697. :CreateContentHTMLCode
  698.  
  699.     Clear      cchcHTML
  700.  
  701. *Crack the ContentData
  702.  
  703.     extract     cchcGN,1,@ContentData
  704.     extract     cchcPath,2,@ContentData
  705.  
  706. *Get the slist from the indicated directory.
  707.     convert     cchcPath,trim
  708.     concat      cchcPath,Content\,@cchcPath
  709.     concat      cchcX,@cchcPath,\content.sl
  710.  
  711.     readfile    cchcContentList,@cchcX,slist
  712.     if @$status eq "NF"
  713.         scream "Content file not found ",@cchcX
  714.         halt
  715.     endif
  716.  
  717. *extract each record into local variables before generating HTML.
  718.  
  719.     set     cchcIndex,2
  720.     set     cchcListCount, count @cchcContentList
  721.  
  722. :cchcExtractLine
  723.  
  724.     if @cchcIndex gt @cchcListCount     goto cchcExit
  725.  
  726. *Handle width-scaling prefix on the file name
  727.  
  728.     extract     cchcEFN,@cchcIndex,@cchcContentList
  729.     substring   cchcX,@cchcEFN,1,1
  730.     if  @cchcX eq "*"
  731.         instring    cchcX,@cchcEFN,"*",2
  732.         set         cchcX,@cchcX - 1
  733.         substring   cchcScale,@cchcEFN,2,@cchcX
  734.         set         cchcX,@cchcX + 2
  735.         substring   cchcEFN,@cchcEFN,@cchcX,99
  736.     else
  737.         set     cchcScale,0
  738.     endif
  739.  
  740.     convert     cchcEFN,uppercase
  741.     set         cchcIndex,@cchcIndex + 1
  742.  
  743.     extract     cchcED,@cchcIndex,@cchcContentList
  744.     set         cchcIndex,@cchcIndex + 1
  745.  
  746.     extract     cchcEMC,@cchcIndex,@cchcContentList
  747.     convert     cchcEMC,uppercase
  748.     set         cchcIndex,@cchcIndex + 1
  749.  
  750.     extract     cchcEAC,@cchcIndex,@cchcContentList
  751.     convert     cchcEAC,uppercase
  752.     set         cchcIndex,@cchcIndex + 1
  753.  
  754. *Expand cchcEMC into long hand.
  755.  
  756.     if @cchcEMC eq "C"    set cchcEMC, "Cheats Codes"
  757.     if @cchcEMC eq "U"    set cchcEMC, "Utility"
  758.     if @cchcEMC eq "T"    set cchcEMC, "Tips & Tricks"
  759.     if @cchcEMC eq "E"    set cchcEMC, "Errors"
  760.     if @cchcEMC eq "W"    set cchcEMC,  "Walkthrough"
  761.  
  762. *Expand cchcEAC into long hand.
  763.  
  764.     if @cchcEAC eq "D"    set cchcEAC, "Read"
  765.     if @cchcEAC eq "I"    set cchcEAC, "Install"
  766.  
  767. *Generate the HTML fragment.
  768.  
  769.     concat  cchcHTML,@cchcHTML,
  770.             &<tr>
  771.             &<td><a href=^"exit:ActionData=,@cchcEAC,;,@cchcPath,;,@cchcScale,;,@cchcEFN,;,@cchcED,?ContentItemClick^">,
  772.             &    @cchcEAC, </a></td>
  773.             &<td>,@cchcEFN,.</td>
  774.             &<td>,@cchcED, </td>
  775.             &<td>,@cchcEMC, </td>
  776.             &</tr><br>
  777.  
  778.     goto cchcExtractLine
  779.  
  780. *Clean up our toys and return.
  781.  
  782. :cchcExit
  783.     Release     cchcIndex,cchcContentList,cchcListCount
  784.     Release     cchcEFN,cchcEMC,cchcEAC,cchcED,cchcX,cchcZ,cchcPath,cchcScale
  785.  
  786.     return
  787.  
  788.     Debug   all
  789.     gosub   shInitTheme
  790.  
  791. :loop
  792.     gosub   shTheme
  793.     goto    loop
  794.  
  795. **
  796. *Sub SoundHandler. (sh) Handles theme music and phrases; it allows a theme to
  797. *be interrupted by a phrase, but waits for a phrase to end before playing a theme.
  798. *
  799. *Entry  shInitTheme     Initializes the theme system.
  800. *Entry  shTheme         Just call it, it takes care of themes.
  801. *Entry  shInitPhrase    Initializes the phrase system.
  802. *Entry  shPhrase        Just call it, it takes care of phrase.
  803. *
  804. *Option:    shThemeEnable can be set to FALSE to disable the Theme unit.
  805. *           shPhraseEnable can be set to FALSE to disable the Phrase unit.
  806. *
  807.  
  808. *Entry shInitTheme: Initialize the theme files by putting them into an slist.
  809.  
  810. :shInitTheme
  811.     findfile    shThemeList,sound\themes\*.wav
  812.     set         shThemeListCount, count @shThemeList
  813.     set         shThemeEnable,TRUE
  814.     return
  815.  
  816. *Entry shTheme: Play the next WAV sound file in the theme listlist.
  817.  
  818. :shTheme
  819.     if @shThemeEnable ne TRUE return
  820.  
  821.     player  2,CHECK
  822.     if @$STATUS eq PLAY goto shTHEME
  823.     player  1,CHECK
  824.     if @$STATUS eq PLAY return
  825.  
  826.     set     shThemeListIndex, random @shThemeListCount
  827.     extract shThemeFile,@shThemelistIndex,@shThemeList
  828.     player  1,STOP,WAV,@shThemeFile
  829.     player  1,PLAY
  830.     return
  831.  
  832. *Entry shInitPhrase: Initialize the phrase files by putting them into an slist.
  833.  
  834. :shInitPhrase
  835.     findfile    shPhraseList,sound\phrases\*.wav
  836.     set         shPhraseListCount, count @shPhraseList
  837.     set         shPhraseEnable,TRUE
  838.     return
  839.  
  840. *Entry shPhrase: Play the next WAV sound file in the Phrase listlist.
  841.  
  842. :shPhrase
  843.     if @shPhraseEnable ne TRUE return
  844.  
  845.     set     shPhraseListIndex, random @shPhraseListCount
  846.     extract shPhraseFile,@shPhraselistIndex,@shPhraseList
  847.     player  2,STOP,WAV,@shPhraseFile
  848.     player  2,PLAY
  849.     return
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.